require(['config'], () => {
    require(['template', 'header', 'footer', 'leader'], (template) => {
        class Cart {
            constructor() {
                    this.getData()
                    if (this.cart) {
                        this.setMoney()
                        this.checkChange()
                        this.setAllcheck()
                        this.changeAllcheck()
                        this.deleteGoods()
                        this.deleteAllGoods()
                        this.setNum()
                        this.subNum()
                        this.addNum()
                    }
                }
                // 渲染页面
            getData() {
                    const cart = localStorage.getItem("cart")
                    this.cart = JSON.parse(cart)
                    if (cart) {
                        $(".empty").hide()
                        $(".full").show()
                        let html = template("table-tr-template", {
                            data: this.cart
                        })
                        $(".car-table").html(html)

                    } else {
                        $(".empty").show()
                        $(".full").hide()
                    }
                }
                // 计算总价
            setMoney() {
                    const sumMoney = this.cart.reduce((money, shop) => {
                        if (shop.check) {
                            money += shop.price * shop.num
                        }
                        return money
                    }, 0)
                    $(".sum-show .price").html(sumMoney.toFixed(2))

                }
                // 设置商品总件数
            setNum() {
                    const sumNum = this.cart.reduce((num, shop) => {
                        if (shop.check) {
                            num += shop.num
                        }
                        return num
                    }, 0)
                    $(".cart-title .sum").html(`共${sumNum}件`)
                }
                // 根据选择框计算价格
            checkChange() {
                    const _this = this
                    $(".td-check .checkbox").on('change', function() {
                        const id = $(this).parents('tr').data("id")
                        _this.cart = _this.cart.map(shop => {
                            if (shop.id === id) {
                                shop.check = $(this).prop("checked")
                            }
                            return shop
                        })
                        localStorage.setItem('cart', JSON.stringify(_this.cart))
                        _this.setMoney()
                        _this.setAllcheck()
                        _this.setNum()
                    })
                }
                // 全选设置
            setAllcheck() {
                    $(".allcheckbox").prop("checked", this.cart.every(shop => shop.check))
                }
                // 取消全选
            changeAllcheck() {
                    const _this = this
                    $(".allcheckbox").on('change', function() {
                        if ($(this).prop("checked")) {
                            _this.cart.forEach(item => {
                                item.check = true
                            });
                            localStorage.setItem("cart", JSON.stringify(_this.cart))
                            $(".td-check .checkbox").prop("checked", true)
                            $(".allcheckbox").prop("checked", true)
                            _this.setMoney()
                        } else {
                            console.log(_this.cart);
                            _this.cart.forEach(item => {
                                item.check = false
                            });
                            localStorage.setItem("cart", JSON.stringify(_this.cart))
                            $(".td-check .checkbox").prop("checked", false)
                            $(".allcheckbox").prop("checked", false)
                            _this.setMoney()
                        }
                    })
                }
                // 删除选中的商品
            deleteGoods() {
                    const _this = this
                    $(".info-bottom .fr").on("click", function() {
                        if (confirm("您确定删除吗？")) {
                            let id = $(this).parents("tr").data("id")

                            _this.cart = _this.cart.filter(shop => {
                                return shop.id !== id
                            })
                            localStorage.setItem('cart', JSON.stringify(_this.cart))
                            $(this).parents("tr").remove()
                            _this.setNum()
                            _this.setMoney()
                            _this.setAllcheck()
                        }
                        if (_this.cart.length === 0) {
                            localStorage.clear();
                            _this.getData()
                            $(".cart-title .sum").html(`共0件`)
                        }
                    })
                }
                // 删除所有商品
            deleteAllGoods() {
                    const _this = this
                    $(".sum-operate .delete").on("click", function() {
                        if (confirm("您确定要删除所有商品吗?")) {
                            localStorage.clear();
                            _this.getData()
                            $(".cart-title .sum").html(`共0件`)
                        }
                    })

                }
                // 减少商品数量
            subNum() {
                    const _this = this
                    $(".num-sub").on("click", function() {
                        let id = $(this).parents("tr").data("id")
                        _this.cart.forEach(item => {
                            if (item.id === id) {
                                if (item.num == 1) {
                                    alert("不能再减少了哦")
                                    return;
                                }
                                item.num--
                                    $(this).siblings("input").val(item.num)
                            }
                        });
                        localStorage.setItem('cart', JSON.stringify(_this.cart))
                        _this.setNum()
                        _this.setMoney()
                    })
                }
                // 增加商品数量
            addNum() {
                const _this = this
                $(".num-add").on("click", function() {
                    let id = $(this).parents("tr").data("id")
                    _this.cart.forEach(item => {
                        if (item.id === id) {
                            item.num++
                                $(this).siblings("input").val(item.num)

                        }
                    });
                    localStorage.setItem('cart', JSON.stringify(_this.cart))
                    _this.setNum()
                    _this.setMoney()
                })
            }
        }
        return new Cart();
    })
})